/**
 * 
 * 多态：
 * 相同的事物，调用其相同的方法，参数也相同时，作用在不同的对象表现的行为却不同
 * 实现了方法的个性化，不同的子类根据具体状况可以实现不同的方法
 * 子类对父类的方法进行重写，调用这个方法时，会默认执行子类的方法，即实现多态
 * 参数个数不同, 执行不同的代码 :利用arguments.length判断来实现
 */
namespace _3{

class Animal {
    run(){
        console.log("animal run")
    }

    eat(){
        console.log("animal eat"); 
    }
    call(){
        console.log("animal call");
        
    }

}

class Bee {
    call(): void {
        console.log("嗡嗡嗡")
    }
    // run(){
    //     console.log("Bee run")
    // }

    // eat(){
    //     console.log("Bee eat"); 
    // }
}

class Cat extends Animal{
    call(): void {
        console.log("喵喵喵")
    }
}

class Dog extends Animal{
    call(): void {
        console.log("汪汪汪");
        
    }
}

function getAnimal(animal : Animal){
    if(animal){
        animal.call()
    }
}

// getAnimal(new Bee())
}